package com.ctrip.demo.jmh;

import com.google.gson.Gson;
import org.junit.jupiter.api.Test;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;

import java.util.concurrent.TimeUnit;

/**
 * 一个方法对应一个@Benchmark注解，一个@Benchmark注解对应一个基准测试方法。
 * 注释在类上的注解，或者注释在类的字段上的注解，则是类中所有基准测试方法共用的配置。
 */
public class JsonBenchmark {

    @Test
    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    public void testGson() {
        Gson gson = new Gson();
        JsonTestModel jsonTestModel = gson.fromJson("{\"startDate\":\"2020-04-01 16:00:00\",\"endDate\":\"2020-05-20 13:00:00\",\"flag\":true,\"threads\":5,\"shardingIndex\":0}", JsonTestModel.class);
//        System.out.println(jsonTestModel);
    }

    /**
     * 通过JMH我们可以轻松的测试出某个接口的吞吐量、平均执行时间等指标的数据。
     *
     * 假设我想测试testGson方法的平均耗时，那么可以使用@BenchmarkMode注解指定测试维度为Mode.AverageTime。
     */
//    @Test
//    @Benchmark
//    @BenchmarkMode(Mode.AverageTime)
//    public void testGson1() {
//        Gson gson = new Gson();
//        JsonTestModel jsonTestModel = gson.fromJson("{\"startDate\":\"2020-04-01 16:00:00\",\"endDate\":\"2020-05-20 13:00:00\",\"flag\":true,\"threads\":5,\"shardingIndex\":0}", JsonTestModel.class);
//        System.out.println(jsonTestModel);
//    }
//
//    @Test
//    @Benchmark
//    @BenchmarkMode(Mode.AverageTime)
//    @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
//    public void testGson2() {
//        Gson gson = new Gson();
//        JsonTestModel jsonTestModel = gson.fromJson("{\"startDate\":\"2020-04-01 16:00:00\",\"endDate\":\"2020-05-20 13:00:00\",\"flag\":true,\"threads\":5,\"shardingIndex\":0}", JsonTestModel.class);
//        System.out.println(jsonTestModel);
//    }



}
